﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using log4net;
using Sireass.Bl;
using Sireass.Asp.Util;
using Sireass.Bl.Security;

namespace Sireass.Asp.Actividades
{
	public partial class AdministrarActividades : System.Web.UI.Page
	{		
		// Create a logger for use in this class
		private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);		
		private PrestadorInfo prestador = null;
		private AsignacionInfo asignacion = null;
		private ActividadAsignacionList aal = null;

		#region Page
		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
				Security.ValidarSeguridad(Response, HttpContext.Current.User.Identity, typeof(ActividadAsignacionList));
				var identity = HttpContext.Current.User.Identity;
				if (identity.IsAuthenticated)
				{
					SireassIdentity id = (SireassIdentity)Csla.ApplicationContext.User.Identity;
					PrestadorCriteria criteria = new PrestadorCriteria(null, id.IdPersona, null, null, null, null, true, null, null);
					prestador = PrestadorInfo.GetPrestadorInfo(criteria);
					lblPrestador.Text = prestador.NombrePrestador;
					AsignacionCriteria criteriaAsignacion = new AsignacionCriteria(null, prestador.IdPrestador, null, null, null, null, 
																					null, null, null, null, true, null, null);
					asignacion = AsignacionInfo.GetAsignacionInfo(criteriaAsignacion);
					lblClaveProyecto.Text = asignacion.ClaveProyecto;
					lblProyecto.Text = asignacion.NombreProyecto;
					lblFechaInicioAsignacion.Text = asignacion.FechaInicioAsignacion.ToShortDateString();
					lblFechaFinAsignacion.Text = asignacion.FechaFinAsignacion.ToShortDateString();
					lblHorasPorAplicar.Text = asignacion.HorasPorAplicar.ToString();
					lblEstatus.Text = asignacion.Estatus;
					lblEncargadoProyecto.Text = asignacion.EncargadoProyecto;
					ViewState["vwsIdAsignacion"] = asignacion.IdAsignacion;
					CargarActividades();					
				}
			}
			else
			{
				lblExito.Text = string.Empty;
				lblError.Text = string.Empty;
			}
		}

		~AdministrarActividades()
		{
			ViewState["vwsIdAsignacion"] = null;
			prestador = null;
			asignacion = null;
			aal = null;
		}
		#endregion

		#region Grid
		protected void radGrdListado_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
		{
			try
			{
				string strComando = e.CommandName;
				long idActividad;
				switch (strComando)
				{
					case "Editar":
						idActividad = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdActividad");
						ViewState["vwsIdActividad"] = idActividad;
						if (CargarDatosPrograma(idActividad) == true)
						{
							lblRegistroEdicion.Text = "EDICIÓN";
							mvwAdministracionActividades.ActiveViewIndex = 1;
							radBtnGuardar.Text = "Actualizar";
						}
						else return;
						break;
					case "Nuevo":
						lblRegistroEdicion.Text = "REGISTRO";
						mvwAdministracionActividades.ActiveViewIndex = 1;
						break;
					case "Eliminar":
						idActividad = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdActividad");
						if (Eliminar(idActividad) == true)
						{
							CargarActividades();
						}
						break;
					default: break;
				} //fin switch
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}

		protected void radGrdListado_PageIndexChanged(object sender, GridPageChangedEventArgs e)
		{
			CargarActividades();
		}

		protected void radGrdListado_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
		{
			CargarActividades();
		}

		protected void radGrdListado_PreRender(object sender, EventArgs e)
		{
			try
			{
				CheckBox chk;
				string strHabilitado;
				foreach (GridDataItem celda in radGrdListado.Items)
				{
					chk = (CheckBox)celda["Activado"].FindControl("chkHabilitado");
					strHabilitado = celda["Habilitado"].Text;

					if (strHabilitado == "True")
						chk.Checked = true;

					else
						chk.Checked = false;
				}
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}
		#endregion

		#region Botones
		protected void radBtnRegresar_Click(object sender, EventArgs e)
		{
			LimpiarControles();
			mvwAdministracionActividades.ActiveViewIndex = 0;
		}

		protected void radBtnGuardar_Click(object sender, EventArgs e)
		{
			RadButton btn = (RadButton)sender;
			if (btn.Text == "Guardar")
			{
				long idAsignacion = (long)ViewState["vwsIdAsignacion"];
				if (Insertar(idAsignacion) == true)
				{
					lblExito.Text = "Operación realizada con éxito";
				}
				else return;
			}
			else // Actualizar
			{
				long idActividad = (long)ViewState["vwsIdActividad"];
				if (Actualizar(idActividad) == true)
				{
					lblExito.Text = "Operación realizada con éxito";
				}
				else return;
			}
			CargarActividades();
			mvwAdministracionActividades.ActiveViewIndex = 0;
			LimpiarControles();
		}
		#endregion

		#region Métodos
		private void CargarActividades()
		{
			try
			{
				long idAsignacion = Convert.ToInt64(ViewState["vwsIdAsignacion"]);
				ActividadAsignacionCriteria criteria = new ActividadAsignacionCriteria(null, idAsignacion, null, null, null, null, true, null, null);
				aal = ActividadAsignacionList.GetActividadAsignacionList(criteria);
				radGrdListado.DataSource = aal;
				radGrdListado.DataBind();
			}
			catch(Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}

		protected Boolean Insertar(long idAsignacion) //ya está
		{
			try
			{
				ActividadAsignacionEdit objEdit = ActividadAsignacionEdit.NewActividadAsignacionEdit();
				objEdit.Descripcion = rtxtActividad.Text;
				objEdit.FechaInicioActividad = rdpFechaInicioActividad.SelectedDate.Value;
				if (rdpFechaFinActividad.SelectedDate != null)
				{
					objEdit.FechaFinActividad = rdpFechaFinActividad.SelectedDate.Value;
				}
				objEdit.HorasAplicadas = Convert.ToInt16(rtxtHorasAplicadas.Text);
				objEdit.Habilitado = true;
				objEdit.IdAsignacion = idAsignacion;
				objEdit.Save();
				return true;
			}
			catch(Exception ex)
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				if (log.IsDebugEnabled)
				{
					log.Debug("ex.message: " + ex.Message);
					log.Debug("ex.stackTrace: " + ex.StackTrace);
				}
				return false;
			}
		}

		protected Boolean Actualizar(long idActividad)
		{
			try
			{
				ActividadAsignacionEdit objEdit = ActividadAsignacionEdit.GetActividadAsignacionEdit(idActividad);
				objEdit.Descripcion = rtxtActividad.Text;
				objEdit.FechaInicioActividad = rdpFechaInicioActividad.SelectedDate.Value;
				if (rdpFechaFinActividad.SelectedDate != null)
				{
					objEdit.FechaFinActividad = rdpFechaFinActividad.SelectedDate.Value;
				}
				objEdit.HorasAplicadas = Convert.ToInt16(rtxtHorasAplicadas.Text);
				objEdit.Save();
				return true;
			}
			catch(Exception ex)
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				if (log.IsDebugEnabled)
				{
					log.Debug("ex.message: " + ex.Message);
					log.Debug("ex.stackTrace: " + ex.StackTrace);
				}
				return false;
			}
		}

		protected Boolean Eliminar(long idActividad)
		{
			try
			{
				ActividadAsignacionEdit.DeleteActividadAsignacionEdit(idActividad);
				return true;
			}
			catch(Exception ex)
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				if (log.IsDebugEnabled)
				{
					log.Debug("ex.message: " + ex.Message);
					log.Debug("ex.stackTrace: " + ex.StackTrace);
				}
				return false;
			}
		}

		protected Boolean CargarDatosPrograma(long idActividad)
		{
			try
			{
				ActividadAsignacionEdit objEdit = ActividadAsignacionEdit.GetActividadAsignacionEdit(idActividad);
				//hfIdPrograma.Value = objEdit.IdPrograma.ToString();
				rtxtActividad.Text = objEdit.Descripcion;
				rdpFechaInicioActividad.SelectedDate = objEdit.FechaInicioActividad;
				rdpFechaFinActividad.SelectedDate = objEdit.FechaFinActividad;
				rtxtHorasAplicadas.Text = objEdit.HorasAplicadas.ToString();
				return true; //si es exitoso
			}
			catch(Exception ex)
			{
				lblError.Text = "Ocurrió un error al cargar los datos del programa. Inténtelo de nuevo";
				if (log.IsDebugEnabled)
				{
					log.Debug("ex.message: " + ex.Message);
					log.Debug("ex.stackTrace: " + ex.StackTrace);
				}
				return false;
			}
		}

		private void LimpiarControles()
		{
			rtxtActividad.Text = string.Empty;
			rdpFechaInicioActividad.SelectedDate = null;
			rdpFechaFinActividad.SelectedDate = null;
			rtxtHorasAplicadas.Text = string.Empty;
			radBtnGuardar.Text = "Guardar";
			ViewState["vwsIdActividad"] = null;
		}
		#endregion
	}
}